package cn.xueden.config;

import cn.xueden.common.handler.FiledFullHandler;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**功能描述：MybatisPlus配置类
 * @author:梁志杰
 * @date:2025/6/8
 * @description:cn.xueden.config
 * @version:1.0
 */
@Configuration
@MapperScan({"cn.xueden.system.mapper", "cn.xueden.edu.mapper"})
@RequiredArgsConstructor
public class MybatisPlusConfig {
    /**
     * 注入元数据对象处理器
     */
    private final FiledFullHandler filedFullHandler;

    /**
     * 配置Mybatis-Plus拦截器
     *
     * 该方法主要用于创建和配置Mybatis-Plus的拦截器实例通过这个拦截器可以添加多个内部拦截器
     * 以实现不同的功能，如分页查询、性能分析等
     *
     * @return MybatisPlusInterceptor 返回配置好的Mybatis-Plus拦截器实例
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        // 创建Mybatis-Plus拦截器实例
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页拦截器，用于处理分页查询操作，指定数据库类型为MySQL
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 添加元数据对象处理器
        return interceptor;
    }

    /**
     * 配置全局配置对象
     *  该方法创建并配置了一个全局配置对象，用于统一处理特定的元数据对象处理逻辑
     *  主要目的是通过依赖注入，提供一个全局可用的配置实例
     * @return
     */
    @Bean
    public GlobalConfig globalConfig() {
        // 创建全局配置对象
        GlobalConfig config = new GlobalConfig();
        // 设置元数据对象处理器为自定义的元数据对象处理器
        config.setMetaObjectHandler(filedFullHandler);
        // 返回配置好的全局配置对象
        return config;
    }
}
